package kstech.com.wifitest.exception;

import android.app.Application;
import android.widget.Toast;

import org.xutils.x;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Date;

import kstech.com.wifitest.utils.AppContext;
import kstech.com.wifitest.utils.DateUtil;


/**
 * 全局异常处理上下文，覆盖自带Application
 * 系统未捕获异常处理，全局异常处理
 * @author wanghaibin
 * @created 2016-11-16 上午10:39:09
 * @since v1.0
 */
public class ExcApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(false);
        // 设置未捕获异常的处理器
        Thread.setDefaultUncaughtExceptionHandler(new MyHandler());
    }

    class MyHandler implements Thread.UncaughtExceptionHandler {

        // 一旦有未捕获的异常,就会回调此方法
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            System.out.println("发现一个未处理的异常, 但是被哥捕获了...");
            ex.printStackTrace();

            // 收集崩溃日志, 可以在后台上传给服务器,供开发人员分析
            try {
                //将crash log写入文件
                FileOutputStream fileOutputStream = new FileOutputStream("/storage/sdcard1/wifi_test_log.txt", true);
                PrintStream printStream = new PrintStream(fileOutputStream);
                printStream.println(DateUtil.getDateTimeFormat(new Date())+"---------------------------------------------");
                ex.printStackTrace(printStream);
                printStream.flush();
                printStream.close();
                fileOutputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {

            }
            // 调用自定义退出
            AppContext.exitSystem();
            // 停止当前进程，防止下次进入白屏
            android.os.Process.killProcess(android.os.Process.myPid());
//	            System.exit(-1);
        }

    }
}

